﻿// Smallest Difference POJ - 2718.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
//#include <unordered_set>
#include <cstring>
#include <algorithm>
#include <set>
#include <stdio.h>

using namespace std;
//https://vjudge.csgrandeur.cn/problem/POJ-2718
/*
给定一些不同的十进制数字，你可以通过选择其中的非空子集并按照某种顺序将它们写成一个整数。
剩下的数字可以按照某种顺序写成第二个整数。除非结果整数为0，否则整数不能以数字0开头。

例如，如果给定数字0、1、2、4、6和7，你可以写出一对整数10和2467。当然，有很多方法可以形成这样的整数对：210和764、204和176等等。
最后一对整数之间的差的绝对值是28，事实证明，根据上述规则形成的其他整数对无法达到更小的差。

输入
输入的第一行包含要进行的测试案例数。对于每个案例，输入包含一行，其中至少有两个但不超过10个十进制数字。
（十进制数字为0、1、...、9。）输入中的一行中没有重复的数字。这些数字将按照递增的顺序，用一个空格分隔开。

输出
对于每个测试案例，将最小绝对差写在单独的一行上，这个绝对差是根据上述规则从给定的数字中所能形成的两个整数的差。

4
0 1 2 4 6 7
3 5
3 0
0 1 2 4 6 7

28

*/

int arr[11]; int len;
int t,n;
int ans;
int a[5]; int alen;
int b[5]; int blen;
set<int> vis;

int toNum(int c[], int clen) {
	int sum = 0;
	//排除0开头的错误组合 但是长度为1 是可以选择0的
	if (clen > 1 && c[0] == 0) return 0x3f3f3f3f;
	for (int i = 0; i < clen; i++) {
		sum = sum * 10 + c[i];
	}

	return sum;
}

void Check() {
	int alen = len / 2; blen = 0;
	for (int i = 0; i < alen; i++) {
		a[i] = arr[i];
	}
	for (int i = alen; i < len; i++) {
		b[blen++] = arr[i];
	}

	int an = toNum(a, alen);
	int bn = toNum(b, blen);
	//cout << an << " " << bn << endl;
	ans = min(ans, abs(an - bn));
}

void dfs(int curr) {
	if (curr == len) {
		Check();
		return;
	}

	for (int i = curr; i < len; i++) {
		swap(arr[i], arr[curr]);
		dfs(curr + 1);
		swap(arr[i], arr[curr]);
	}
}

void solve() {
	ans = 0x3f3f3f3f;
	dfs(0);
	cout << ans << endl;
}


int main()
{
	scanf("%d",&t);
	char c;
	while (1) {
		scanf("%c",&c);
		if ('\n' == c) {
			break;
		}
	}
	while (t--) {
		memset(arr, 0, sizeof arr);
		ans = 0x3f3f3f3f;
		vis.clear();
		len = 0;
		for (int i = 0; i <= 100; i++) {
			scanf("%c",&c);
			if ('\n' == c) {
				break;
			}
			else if (c >= '0' && c <= '9') {
				arr[len++] = c-'0';
			}
		}

		solve();
	}

	return 0;
}

 